package Sort;

import java.util.Comparator;

/**
 *
 * @author pol
 */
public class BubbleSort {

    /**
     * Сортировка обменом
     *
     * @param obj сортируемый массив
     * @param cmp компаратор, по которому происходит сравнение объектов
     */
    public static void sort(Object[] obj, Comparator cmp) {
        for (int k = 0; k < obj.length - 1; k++) {
            boolean isSorted = true;
            for (int i = 1; i < obj.length - k; i++) {
                if (cmp.compare(obj[i], obj[i - 1]) < 0) {
                    swap(obj, i, i - 1);
                    isSorted = false;
                }
            }
            if (isSorted) {
                break;
            }
        }
    }

    /**
     * Меняет два элемента в массиве местами
     *
     * @param x массив
     * @param a индекс первого элемента
     * @param b индекс второго элемента
     */
    private static void swap(Object[] x, int a, int b) {
        Object t = x[a];
        x[a] = x[b];
        x[b] = t;
    }
}
